package case4

import "fmt"

/** 接口示例4

1. 实现接口：指针接收者与值接收者 示例
*/

// 实现接口：指针接收者与值接收者 示例
func case1() {
	var d1 describer
	p1 := person{"小红", 22}
	d1 = p1
	d1.describe()
	p1.describe()

	p2 := person{"小张", 34}
	d1 = &p2
	d1.describe()

	var d2 describer
	a1 := address{"北京市区", "aaa"}
	d2 = &a1
	d2.describe()

}

func Test() {

	// 实现接口：指针接收者与值接收者 示例
	case1()

}

// 实现接口：指针接收者与值接收者
type describer interface {
	describe()
}

type person struct {
	name string
	age  int
}

// 值接收者实现
func (p person) describe() {
	fmt.Println("值接收者实现，打印参数，", p)
}

type address struct {
	name    string
	country string
}

// 指针接收者实现
func (a *address) describe() {
	fmt.Println("指针接收者实现，打印参数，", a)
}
